﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace TweetRating
{
    public partial class FormularioRating : Form
    {
        private List<Tuple<ProgramaDeTV, List<IComentario>>> programasYComentarios;

        public FormularioRating()
        {
            InitializeComponent();
        }

        #region Eventos
        private void FormularioRating_Load(object sender, EventArgs e)
        {
            programasYComentarios = new List<Tuple<ProgramaDeTV, List<IComentario>>>();
            Enumeraciones.obtenerIntenciones().ForEach(unaIntencion => checkedListBoxIntenciones.Items.Add(unaIntencion, true));
            this.comboBoxHorarioDesde.DataSource = Enumeraciones.obtenerHoras();
            this.comboBoxHorarioHasta.DataSource = Enumeraciones.obtenerHoras();
        }
        #endregion

        #region Botones
        private void buttonMostrarRating_Click(object sender, EventArgs e)
        {
            mostrarRating();
        }
        #endregion

        #region Auxiliares
        private void mostrarRating()
        {
            DateTime fecha = this.dateTimePicker.Value;
            Hora desde = new Hora(int.Parse(this.comboBoxHorarioDesde.SelectedValue.ToString().Replace(":00", "")));
            Hora hasta = new Hora(int.Parse(this.comboBoxHorarioHasta.SelectedValue.ToString().Replace(":00", "")));
            List<Intencion> intencionesBuscadas = Enumeraciones.obtenerIntenciones().FindAll(unaIntencion => this.checkedListBoxIntenciones.CheckedItems.Contains(unaIntencion));
            InformeDelRating elInforme = MedidorDeAudiencia.solicitarRating(fecha, desde, hasta, intencionesBuscadas, new ComunicadorConTwitter(), new ClasificadorPorPalabrasRegistradas());
            this.mostrarGrafico(elInforme);
            this.mostrarComentarios(elInforme);
        }
        private void mostrarGrafico(InformeDelRating elInforme)
        {
            if (elInforme.grafico != "")
                this.webBrowser.Navigate(elInforme.grafico);
        }
        private void mostrarComentarios(InformeDelRating elInforme)
        {
            programasYComentarios = elInforme.programasYComentarios;
            List<ProgramaDeTV> programas = this.programasYComentarios.Select(unaTupla => unaTupla.Item1).ToList();
            this.comboBoxProgramas.DataSource = programas;
        }
        #endregion

        private void comboBoxProgramas_SelectedValueChanged(object sender, EventArgs e)
        {
            ProgramaDeTV elPrograma = this.comboBoxProgramas.SelectedItem as ProgramaDeTV;
            if (elPrograma != null)
            {
                this.comboBoxComentarios.DataSource = this.programasYComentarios.Find(unaTupla => unaTupla.Item1.nombre == elPrograma.nombre).Item2;
            }
        }

    }
}
